


const LIFE_CYCLE = [
    'beforeCreate',
    'created'
]
let starts = {}

LIFE_CYCLE.forEach(hook => {
    starts[hook] = function (p, c) {
        if (c) { // 如果有子
            if (p) {  // 子 父都有  返回数组
                return p.concat(c)
            } else { // 将zi 包装为数组
                return [c]
            }
        } else { // 只有mixin
            return p
        }
    }
})

starts.components = function (parent, child) { // 合并全局 与自身的component 产生父子关系
    let res = Object.create(parent)
    if (child) {
        for (let key in child) {   // 自身的优先级更高
            res[key] = child[key]
        }
    }
    return res

}

export function mergeOptions(parent, child) {
    let obj = {}

    for (let key in parent) {
        mergeField(key)
    }
    for (let key in child) {
        if (!parent.hasOwnProperty(key)) {
            mergeField(key)
        }
    }

    function mergeField(key) {
        if (starts[key]) { // 策略模式， 判断是否在策略中
            obj[key] = starts[key](parent[key], child[key])
        } else {
            obj[key] = child[key] || parent[key]
        }

    }
    return obj
}